
package player;

import game.Jeton;
import game.Partie;

import java.util.Vector;


public abstract class Player 
{

	private String    name;
	private int       score;        
	private Vector<Jeton>  letters;


	//Constructors
	public Player(String n)
	{
		this.name     = n;
		this.score   = 0;
		this.letters=new Vector<Jeton>(7);
	}


	//Getters
	public String   getName()     { return name;      }
	public int      getScore()   { return score;    }
	public Vector<Jeton> getLetters() { return letters;  }
	public Jeton  getLettre(int i) { return letters.get(i);  }

	//Setters
	public void     setLettres(Vector<Jeton> l) { letters = l;  }
	public void addPointsToScore(int points) { score += points; }


	/**ajoute un jeton aux lettre du joueur qui est un vector<Jeton>
	 * @param jeton
	 */
	public void addLetters(Jeton jeton) 
	{
		letters.add(jeton);
	}



	public String toString()
	{
		String s;
		s="Name : "+getName()+"\nScore :"+getScore()+"\nLettres :"+getLetters();
		return s;
	}

	/**
	 *  Score de fin de partie : on retire au score du joueur les lettres de sa main non placées sur le plateau
	 * @return le scroe final du joueur
	 */
	public int getFinalScore()
	{
		int malus = 0;
		for (Jeton j : letters)
			malus += j.GetValue();
		return score - malus;
	}



	public abstract boolean play_turn(Partie partie);


	/**passe le jeton du joueur au plateau
	 * @param jeton
	 * @returnle jeton donnée par le joueur
	 */
	public Jeton giveLetter(Jeton jeton)
	{
		Jeton res    = null;
		boolean found = false;
		for (int i = 0 ; i < letters.size() && !found ; i++)
			if (letters.get(i) != null && letters.get(i).equals(jeton))
			{
				found  = true;
				res    = letters.get(i);
				letters.remove(i);
			}
		return res;
	}


	/**retourne le jeton correspondant a la lettre en param
	 * @param s
	 * @return le jeton chercher suivant le param
	 */
	public Jeton getJeton(String s) 
	{
		Jeton res=null;
		for(int i=0;i<letters.size();i++)
		{
			if(letters.get(i).equals(s))res=letters.get(i);
		}
		
		return res;
	}

}
